package 剑指offer;

public class _16数值的整数次方 {
	/**
	 * 
	 *@time 2021年1月5日下午7:02:53
	 * 
	 *@param x
	 *@param n
	 *@return double
	 *
	 *@see a^n=a^n/2*a^n/2;
	 */
    public static double myPow(double x, int n) {
    	if(x==0) return 0;
    	if(n==0) return 1;
    	if(n==1) return x;
    
    	if(n<0) 
    	 return 1/x*myPow(1/x, -n-1);
    	
    	return (n&1)==0?myPow(x*x, n>>1):myPow(x*x, n>>1)*x;
    }

    /**
     * 
     *@time 2021年1月5日下午7:16:44
     * 
     *@param args void
     *
     *@see 位运算(&)效率要比取模运算(%)高很多，
     *主要原因是位运算直接对内存数据进行操作，不需要转成十进制，
     *因此处理速度非常快。
     *a % b == a & (b - 1)
     *前提：b 为 2^n
     */
    public static void main(String[] args) {
    	System.out.println(myPow(2,
    			10));
	}
}
